
"""
Created on Tue Feb 19 14:55:43 2013

@author: aponteeduarddo@gmail.com
Copyright Eduardo Aponte 2013.
"""

from mex_binder import binder_py

eyelink_get_last_data = binder_py('mx_eyelink_get_last_data')
eyelink_get_last_data.mx_c.headers = ['<eyelink.h>','"mex.h"','"utils.h"']
eyelink_get_last_data.bindo += ['utils.o']
eyelink_get_last_data.mx_c.code = \
"""
INT16 _main( mxArray *ia[] )
{
    void FARTYPE *buf;
    INT16 code;
    code = eyelink_get_last_data( buf );
    mwSize t[] = {0};
    
    switch ( code ) {
        case 0:
            ia[0] = mxCreateCellArray(0,t);
            break;
        case -1:
            ia[0] = mxCreateCellArray(0,t);
            break;
        case SAMPLE_TYPE:
            isample2struct( *((ISAMPLE *) buf), ia );
            break;
        default:
            ia[0] = mxCreateCellArray(2,t);
            ievent2struct( *((IEVENT *) buf), ia );
            break;
    }
    return code;
}

void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
    mwSize td[2] = {1,1};
    double *status;

    /* Verify input arguments. */
    if(nrhs != 0 ) {
        mexErrMsgTxt("Incorrect number of inputs.");
    } else if( nlhs > 2 ) {
        mexErrMsgTxt("Too many output arguments.");
    }

    plhs[0] = mxCreateNumericArray( 2, td, mxDOUBLE_CLASS, mxREAL);
    status = mxGetPr(plhs[0]);

    if ( nlhs == 2 ){
        *status = (double ) _main( plhs+1 );
    } else if ( nlhs < 2 ){
        void FARTYPE *buff;
        *status = eyelink_get_last_data( buff );
    }
    return;
}
"""

eyelink_get_last_data.mx_c.mdoc = \
"""function [ ] = mx_eyelink_get_last_data( )
%MX_EYELINK_GET_LAST_DATA Gets an integer (unconverted) copy of the last/newest
% link data (sample or event) seen by eyelink_get_next_data().
%
% Parameters:
% buf 	Pointer to buffer (ISAMPLE, IEVENT, or ALL_DATA type).
% Returns:
% 0 if no data, SAMPLE_TYPE if sample, else event type code.
%
"""
eyelink_get_last_data.write_c()
eyelink_get_last_data.write_m()
eyelink_get_last_data.compile()
eyelink_get_last_data.write_sh()

